<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    

<script>
// ES1 -> ECMAScript 1
// ES2 -> ECMAScript 2
// ES3 -> ECMAScript 3
// ES5 -> ECMAScript 5
// ES6 -> ECMAScript2015 -> ES2015 -> ES6

// ES5新增的内容：

// 严格模式
// 使用 'use strict' 字符串开启严格模式
// 'use strict';
// console.log( '全局严格模式' );

// function fn(){
//     'use strict';
//     console.log( '局部严格模式' );
// }
// fn();


// 严格模式的一些限制：

// 1.声明变量时，必须使用var关键字
// 'use strict';
// var a = 1;
// b = 2;// 报错
// console.log( a,b );


// 2.对于不合理的操作，不再做静默失败处理
// 'use strict';
// NaN = 123;// 报错
// console.log( NaN );

// var str = 'abc';
// console.log( str.length );// 3
// str.length = 2;// 报错
// console.log( str.length );


// 3.函数的形参不能重名
// 'use strict';
// function test(a,b,c,a){
//     console.log( a+b+c );
// }
// test(1,2,3,4);


// 4.禁止使用以0开头的八进制数，以0o开头表示八进制数（0b开头表示二进制，0x开头表示十六进制数）
// 'use strict';
// var num1 = 024;// 八进制数
// var num2 = 0o24;
// console.log( num1 );// 20 十进制
// console.log( num2 );// 20 十进制


// eval()函数的作用是，将字符串解析成JS代码并执行
// var str = 'var a = 123; console.log(a);';
// console.log( str );// 'var a = 123; console.log(a);'
// eval(str);
// eval('alert("hello")');
// 5.强制为eval创建新的作用域
// 'use strict';
// eval('var a = 123;');
// console.log( a );// 报错


// 6.形参和arguments不再相互关联
// 'use strict';
// var x = 1;
// function fn(x){// x=1 arguments[0]=1
//     x = 2;// 修改形参 arguments[0]=2
//     arguments[0] = 3;// 修改arguments[0]的值  x=3
//     console.log( x );// 3 2
// }
// fn(x);// fn(1)
// console.log( x );// 1 1


// 7.禁止函数中的this直接指向window对象
// this指向：this所在的函数，谁调用就指向谁
// 'use strict';
// function show(){
//     console.log( this );
// }
// show();// undefined
// window.show();// window


// 8.函数只能声明在全局或函数中
// function f1(){}
// function f2(){
//     function f3(){}
// }

// 'use strict';
// if ('') {
//     function test(){
//         console.log( 123 );
//     }
// } else {
//     function test(){
//         console.log( 456 );
//     }
// }
// test();// 报错

// var num = 123;
// function test(num){
//     console.log( num );
// }
// if ('') {
//     num = 123;
// } else {
//     num = 456;
// }
// test(num);


// ES5新增的数组方法：
// indexOf()
// lastIndexOf()
// forEach()
// map()
// filter()
// some()
// every()
// reduce()


</script>
</body>
</html>